home *** CD-ROM | disk | FTP | other *** search
/ SGI Hot Mix 17 / Hot Mix 17.iso / HM17_SGI / research / lib / reverse.pro < prev    next >
Text File  |  1997-07-08  |  2KB  |  96 lines

  1. ; $Id: reverse.pro,v 1.4 1997/01/15 03:11:50 ali Exp $
  2. ;
  3. ; Copyright (c) 1991-1997, Research Systems, Inc.  All rights reserved.
  4. ;       Unauthorized reproduction prohibited.
  5.  
  6. function reverse, a, subscript    ;Reverse a vector or array about the subscript
  7. ; subscript = 1 or omitted to reverse 1st dim, =2 for 2nd dim.
  8. ; This function simply calls rotate with the correct parameter.
  9. ;+
  10. ; NAME:
  11. ;    REVERSE
  12. ;
  13. ; PURPOSE:
  14. ;    Reverse the order of rows or columns in an array or vector.
  15. ;
  16. ; CATEGORY:
  17. ;    Array manipulation.
  18. ;
  19. ; CALLING SEQUENCE:
  20. ;    Result = REVERSE(Array [, Subscript_Index])
  21. ;
  22. ; INPUTS:
  23. ;    Array:    The array or vector containing the original data.
  24. ;
  25. ; OPTIONAL INPUT PARAMETERS:
  26. ; Subscript_Index:  If this parameter is omitted or 1, the first subscript is
  27. ;        reversed (i.e., rows are reversed).  Set this parameter to
  28. ;        2 to reverse columns.
  29. ;
  30. ; KEYWORD PARAMETERS:
  31. ;    None.
  32. ;
  33. ; OUTPUTS:
  34. ;    REVERSE returns a copy of the original array that is reversed about 
  35. ;    one of its dimensions.
  36. ;
  37. ; COMMON BLOCKS:
  38. ;    None.
  39. ;
  40. ; SIDE EFFECTS:
  41. ;    None.
  42. ;
  43. ; RESTRICTIONS:
  44. ;    Only works for 1-, 2-, or 3-dimensional arrays.
  45. ;
  46. ; PROCEDURE:
  47. ;    Uses the ROTATE function.
  48. ;
  49. ; MODIFICATION HISTORY:
  50. ;    Old.
  51. ;    Apr, 1991, DMS,    Added 3D reversing.
  52. ;       Sept, 1992 Mark L. Rivers, added simple return for scaler argument
  53. ;    Sept, 1994. Added default for 3D case.
  54. ;-
  55.  
  56. on_error,2                             ;Return to caller if an error occurs
  57. s = size(a)
  58. ndims = s[0]
  59. if ndims eq 0 then return, a
  60. if ndims eq 3 then begin        ;3D?
  61.     b = a
  62.     if n_elements(subscript) le 0 then subscript = 1  ;Default case
  63.     case subscript of
  64.     1: begin            ;(x,*,*)
  65.         n = s[1]
  66.         for i=0,(n-1)/2 do begin
  67.             t0 = b[i,*,*] & t1 = b[n-1-i,*,*]
  68.             b[n-i-1,0,0] = t0
  69.             b[i,0,0] = t1
  70.             endfor
  71.         endcase
  72.     2: begin            ;(*,x,*)
  73.         n = s[2]
  74.         for i=0,(n-1)/2 do begin
  75.             t0 = b[*,i,*] & t1 = b[*,n-1-i,*]
  76.             b[0,n-i-1,0] = t0
  77.             b[0,i,0] = t1
  78.             endfor
  79.         endcase
  80.     3: begin            ;(x,*,*)
  81.         n = s[3]
  82.         for i=0,(n-1)/2 do begin
  83.             t0 = b[*,*,i] & t1 = b[*,*,n-i-1]
  84.             b[0,0,n-i-1] = t0
  85.             b[0,0, i] = t1
  86.             endfor
  87.         endcase
  88.     else: message, "REVERSE: Subscript parameter out of range"
  89.     endcase
  90.     return,b
  91. endif            
  92. if n_params() then return, rotate(a,5) ;default = 1st dim.
  93. if subscript eq 1 then return,rotate(a,5) else $
  94.     return, rotate(a,7)
  95. end
  96.